#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
#include<errno.h>

/*  通过进程ID测试某个进程是否存在
 *  kill < 0 errno ESRCH 进程不存在
 *           errno EPERM  进程存在，但当前进程没有权限发送信号给该进程
 *  kill == 0            进程存在，而且当前进程有权限发送信号给该进程 
 *  
 *  但这个进程可能是僵尸进程、也可能是原有进程结束后，内核重新将该进程号
 *  分配给新的进程
 *
 * */

int process_exist(int pid)
{
	if (kill(pid, 0) < 0 && errno == ESRCH) return 0;
	  else return 1;
}

int main()
{
	if (process_exist(122)) printf("exist\n");
		else printf("no exist\n");
	return 0;
}
